<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>075-HTML5-WebSQL数据库</title>
</head>

<body>
    <div id="status"></div>
    <!-- 以下是规范中定义的三个核心方法： -->
    <!-- openDatabase：这个方法使用现有的数据库或者新建的数据库创建一个数据库对象。 -->
    <!-- transaction：这个方法让我们能够控制一个事务，以及基于这种情况执行提交或者回滚。 -->
    <!-- executeSql：这个方法用于执行实际的 SQL 查询。 -->

    <script>
        // 1. 打开数据库
        // 使用 openDatabase() 方法来打开已存在的数据库，如果数据库不存在，则会创建一个新的数据库，使用代码如下：
        var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
        // openDatabase() 方法对应的五个参数说明：
        // (1) 数据库名称
        // (2) 版本号
        // (3) 描述文本
        // (4) 数据库大小
        // (5) 创建回调
        //         第五个参数，创建回调会在创建数据库后被调用。

        // 2. 执行查询操作
        // 执行操作使用 database.transaction() 函数：
        db.transaction(function (tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
        });
        // 上面的语句执行后会在 'mydb' 数据库中创建一个名为 LOGS 的表。

        // 3. 插入数据
        db.transaction(function (tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "菜鸟教程")');
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.runoob.com")');
        });
        // 我们也可以使用动态值来插入数据：
        // db.transaction(function (tx) {
        //     tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
        //     tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?)', [e_id, e_log]);
        // });
        // 实例中的 e_id 和 e_log 是外部变量，executeSql 会映射数组参数中的每个条目给 "?"

        // 4. 读取数据
        db.transaction(function (tx) {
            tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
                var len = results.rows.length, i;
                msg = "<p>查询记录条数: " + len + "</p>";
                document.querySelector('#status').innerHTML += msg;

                for (i = 0; i < len; i++) {
                    alert(results.rows.item(i).log);
                }

            }, null);
        });
    </script>
</body>

</html>